package TestModelo;

import java.awt.Point;

import junit.framework.TestCase;
import modelo.*;

public class TestNivel extends TestCase {
	
	private Nivel nivel;
	private int velocidad = 3;	
	private CreadorEnemigo cEnemigo;
	private CreadorEstrategia cEstrategia;
	
	@Override
	public void setUp(){
		nivel = new Nivel();
		cEnemigo = new CreadorCecilio();
		cEstrategia = new CreadorEstrategiaNivelUno();
		nivel.crearMapa(10,10);
	}
	
	public void testCrearNivel(){
		assertTrue(nivel.getJugador().getClass() == Bombita.class);
	}	
	
	public void testCrearEnemigos(){
		nivel.crearEnemigo(velocidad, cEnemigo, cEstrategia);
        assertTrue(nivel.getObjetocVivos().size() == 2);
        assertTrue(nivel.getObjetocVivos().get(1).getClass() == Cecilio.class);
		
	}
	
	
	public void testUbicarContenidos(){
		nivel.crearEnemigo(velocidad, cEnemigo, cEstrategia);
		nivel.ubicarContenidos();
		for (Contenido contenido : nivel.getObjetocVivos()) {
			assertTrue(contenido.ocupaCasillero());			
		}		
	}
	
	public void testCrearContenidos(){
		nivel.crearEnemigo(velocidad, cEnemigo, cEstrategia);		
		nivel.crearObstaculo(new CreadorObstaculoAcero(),5);
		nivel.ubicarContenidos();
		for (Contenido contenido : nivel.getObjetocVivos()){
			if (contenido.getClass().getSuperclass() == Artefacto.class)
				assertTrue(!contenido.ocupaCasillero());
			else
				assertTrue(contenido.ocupaCasillero());
		}			
		
	}
	

	
	public void testLimpiarObjetosNoVivos(){
		nivel.crearEnemigo(velocidad, cEnemigo, cEstrategia);
		nivel.crearEnemigo(velocidad, cEnemigo, cEstrategia);
		nivel.ubicarContenidos();
		assertTrue(nivel.getObjetocVivos().size() > 0);
		for (Contenido  contenido : nivel.getObjetocVivos()) {
			contenido.impactoToletole(new BombaToletole());
		}
		nivel.limpiarNoVivos();
		assertTrue(nivel.getObjetocVivos().size() == 0);		
		
	}
	
	public void testNivelEnJuego(){
		assertTrue(nivel.nivelEnJuego());
	}
	
	public void testObtenerEstadoDelNivel(){
		nivel.crearEnemigo(velocidad, cEnemigo, cEstrategia);
		nivel.crearEnemigo(velocidad, cEnemigo, cEstrategia);
		nivel.ubicarContenidos();
		assertTrue(nivel.getObjetocVivos().size() > 0);
		for (Contenido  contenido : nivel.getObjetocVivos()) {
			contenido.impactoToletole(new BombaToletole());
		}
		nivel.limpiarNoVivos();
		nivel.agregarJugador(new Bombita());		
		// el nivel se ha perdido dadao que "mate" a todos los objetos vivos del nivel
		// y ademas la salida no se ha encontrado
		assertTrue(nivel.obtenerEstadoDelNivel() == EstadosDelJuego.Perdido);
	}


}
